//三数之和
//给你一个整数数组 nums ，判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k
// 同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

//注意：答案中不可以包含重复的三元组。
//原理:
//1.排序      2.固定一个数a        3.找到剩下数中,两数之和等于-a的两个数
//最后去重
public class test7 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int count = in.nextInt();//元素个数
        int[] nums = new int[count];
        for (int i = 0; i < count; i++) {
            nums[i] = in.nextInt();
        }
        Arrays.sort(nums);
        getResult(nums);
    }
    public static void getResult(int[] nums){
        List<List<Integer>> list1 = new ArrayList<>();
        int n = nums.length;
        for (int i = 0; i < n-1; i++) {
            int flag = nums[i];//固定的数
            int left=i+1,right=n-1;
            while(left<right){
                List<Integer> list2 =  new ArrayList<>();
                if (nums[left]+nums[right]==-flag){
                    list2.add(flag);
                    list2.add(left);
                    list2.add(right);
                }
                while (nums[left]==nums[left+1]){
                    left++;
                }
                while (nums[right]==nums[right-1]){
                    right--;
                }
                left++;right--;
                list1.add(list2);
            }
            while (nums[i]==nums[i+1]){
                i++;
            }
        }
    }
}
